package com.hyh.db;

import java.util.List;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.hyh.bean.AdminInfoBean;
import com.hyh.myutils.MyUtils;


/**
 * 使用单例模式来实现数据源
 * 
 * @author hasee
 *
 */
public class DBCPDataSource {
	// 1.定义一个单例模式的静态变量
	private  static DataSource ds = null;

	// 2.构造方法私有化

	private DBCPDataSource() {

	}

	// 3.提供一个静态的全局的访问入口【此处没有进行多进程处理】
	public  static DataSource getDataSource() {
		// 是否第一次访问，并进行初始化
		if (ds == null) {
			try {
				//使用Properties读取配置信息
				Properties prop = new Properties();
				// 加载配置信息
				prop.load(DBCPDataSource.class.getClassLoader().getResourceAsStream("db.properties"));
			   //使用工厂类初始化数据源
			   ds =  BasicDataSourceFactory.createDataSource(prop);
			    
			
			
			} catch (Exception e) {
				// dbcp数据源初始化异常
				System.out.println("dbcp数据源初始化异常"+e.getMessage());
				e.printStackTrace();
			}
		}

		return ds;
	}
	public static void main(String[] args) {
//		try {
//			//测试数据库链接是否正常
//			//创建一个queryrunner类--等价于jdbc的statement查询器
//			QueryRunner qr = new QueryRunner(getDataSource(),true); //第二个参数是支持sql语句中的占位符
//			String strSql = "select * from ADMININFO";
//			//进行 查询操作
//			List<AdminInfoBean> lst= qr.query(strSql, new BeanListHandler<AdminInfoBean>(AdminInfoBean.class));
//		    //遍历查询结果
//			if(lst != null && lst.size() > 0){
//				for (AdminInfoBean adminInfoBean : lst) {
//					System.out.println(adminInfoBean.toString());
//				}
//			}
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		String strSql = "select * from ADMIN";
		//进行 查询操作
		List<AdminInfoBean> lst= MyUtils.getInstance(DBProvider.class).query(strSql, new BeanListHandler<AdminInfoBean>(AdminInfoBean.class));
	    //遍历查询结果
		if(lst != null && lst.size() > 0){
			for (AdminInfoBean adminInfoBean : lst) {
				System.out.println(adminInfoBean.toString());
			}
		}
		
		
		
	}
	
	

}
